/**
**************************************************************************************
*Palisma - Secrets of the Illuminati is an open-source 2D RPG                        *
*Copyright (C) 2006, Tony Sparks                                                     *
*                                                                                    *
*This library is free software; you can redistribute it and/or                       *
*modify it under the terms of the GNU Lesser General Public                          *
*License as published by the Free Software Foundation; either                        *
*version 2.1 of the License, or (at your option) any later version.                  *
*                                                                                    *
*This library is distributed in the hope that it will be useful,                     *
*but WITHOUT ANY WARRANTY; without even the implied warranty of                      *
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                   *
*Lesser General Public License for more details.                                     *
*                                                                                    *
*You should have received a copy of the GNU Lesser General Public                    *
*License along with this library; if not, write to the Free Software                 *
*Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA      *
**************************************************************************************
*/
#pragma once

#include "SoundSource.h"
#include "../Console.h"
#include <map>


/**
===================
Load a Sound file for play back
===================
*/
class SoundLoader
{
public:
	SoundLoader(void);
	/** Load a sound from a file */
	SoundSource* LoadSound( const std::string &s );

    /** Test to see if the sound exists */
    bool HasSound(SoundSource* sound) const;

    /** Delete a sound */
    void Delete(SoundSource* sound);

    /** Number of sound resources */
    size_t NumSounds() const { return m_sounds.size(); };
    /** Clear all Songs from the loader */
    void Clear();
private:
	std::map<std::string, SoundSource*> m_sounds;


    /**
    ==========================
    Sound Report, show all loaded sounds
    ==========================
    */
    class S_Report_f : public ICommand
    {
    public:
        S_Report_f(){};
        void Set(SoundLoader* L) { loader = L; };
        SoundLoader* loader;
	    /** Report all sounds loaded */
        void Exec(std::string &s);
	    virtual ~S_Report_f() {};
    };

    S_Report_f  report_f;
    friend S_Report_f;
public:
	virtual ~SoundLoader(void);
};

